package com.lmy.springboot.config;

import com.lmy.springboot.bean.Dog;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 使用@Configuration 标识一个配置类
 * 如果该配置类在springboot扫描的包/子包下，也会被当成bean注入到ioc容器中
 * 同时也充当了Spring配置文件/容器的作用，可以在该类中注入其他的bean
 *
 * 本质依旧是spring实现bean注入那一套，通过反射+I/O遍历文件
 * 即在扫描包时判断是否有@Configuration，如果有就视为一个配置类，先将其放入BeanDefinitionMap
 * 再将所有Configuration标注的类放入一个集合中，遍历集合中所有的配置类，再遍历所有的方法，当发现有方法被@Bean标注时
 * 再将方法名作为id，返回类型作为Bean放入BeanDefinitionMap中
 */
@Configuration
public class Config {

    /**
     * 使用@Bean，将new出来的Bean对象放入到WSpring容器中
     * 该bean在Spring容器的name/id默认就是方法名
     * @return
     */
    @Bean
    public Dog dog() {
        return new Dog();
    }
}
